home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / tbl_create.php < prev    next >
PHP Script  |  2005-03-31  |  9KB  |  253 lines

  1. <?php
  2. /* $Id: tbl_create.php,v 2.14 2005/03/31 21:51:47 lem9 Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. /**
  6.  * Get some core libraries
  7.  */
  8. require_once('./libraries/grab_globals.lib.php');
  9. $js_to_run = 'functions.js';
  10. require_once('./header.inc.php');
  11.  
  12. // Check parameters
  13.  
  14. require_once('./libraries/common.lib.php');
  15.  
  16. PMA_checkParameters(array('db', 'table'));
  17.  
  18. /**
  19.  * Defines the url to return to in case of error in a sql statement
  20.  */
  21. $err_url = $cfg['DefaultTabTable'] . '?' . PMA_generate_common_url($db, $table);
  22.  
  23.  
  24. /**
  25.  * Selects the database to work with
  26.  */
  27. PMA_DBI_select_db($db);
  28.  
  29.  
  30. /**
  31.  * The form used to define the structure of the table has been submitted
  32.  */
  33. $abort = FALSE;
  34. if (isset($submit_num_fields)) {
  35.     $regenerate = TRUE;
  36.     $num_fields = $orig_num_fields + $added_fields;
  37. } else if (isset($do_save_data)) {
  38.     $sql_query = $query_cpy = '';
  39.  
  40.     // Transforms the radio button field_key into 3 arrays
  41.     $field_cnt = count($field_name);
  42.     for ($i = 0; $i < $field_cnt; ++$i) {
  43.         if (isset(${'field_key_' . $i})) {
  44.             if (${'field_key_' . $i} == 'primary_' . $i) {
  45.                 $field_primary[] = $i;
  46.             }
  47.             if (${'field_key_' . $i} == 'index_' . $i) {
  48.                 $field_index[]   = $i;
  49.             }
  50.             if (${'field_key_' . $i} == 'unique_' . $i) {
  51.                 $field_unique[]  = $i;
  52.             }
  53.         } // end if
  54.     } // end for
  55.     // Builds the fields creation statements
  56.     for ($i = 0; $i < $field_cnt; $i++) {
  57.         // '0' is also empty for php :-(
  58.         if (empty($field_name[$i]) && $field_name[$i] != '0') {
  59.             continue;
  60.         }
  61.         // TODO: maybe move this logic and the one of PMA_generateAlterTable()
  62.         // to a central place
  63.  
  64.         $query = PMA_backquote($field_name[$i]) . ' ' . $field_type[$i];
  65.         if ($field_length[$i] != ''
  66.             && !preg_match('@^(DATE|DATETIME|TIME|TINYBLOB|TINYTEXT|BLOB|TEXT|MEDIUMBLOB|MEDIUMTEXT|LONGBLOB|LONGTEXT)$@i', $field_type[$i])) {
  67.             $query .= '(' . $field_length[$i] . ')';
  68.         }
  69.         if ($field_attribute[$i] != '') {
  70.             $query .= ' ' . $field_attribute[$i];
  71.         } else if (PMA_MYSQL_INT_VERSION >= 40100 && !empty($field_collation[$i])) {
  72.             $query .= PMA_generateCharsetQueryPart($field_collation[$i]);
  73.         }
  74.         if (isset($field_default_current_timestamp[$i]) && $field_default_current_timestamp[$i]) {
  75.             $query .= ' DEFAULT CURRENT_TIMESTAMP';
  76.         } elseif ($field_default[$i] != '') {
  77.             if (strtoupper($field_default[$i]) == 'NULL') {
  78.                 $query .= ' DEFAULT NULL';
  79.             } else {
  80.                 $query .= ' DEFAULT \'' . PMA_sqlAddslashes($field_default[$i]) . '\'';
  81.             }
  82.         }
  83.         if ($field_null[$i] != '') {
  84.             $query .= ' ' . $field_null[$i];
  85.         }
  86.         if ($field_extra[$i] != '') {
  87.             $query .= ' ' . $field_extra[$i];
  88.         }
  89.         $query .= ', ';
  90.         $sql_query .= $query;
  91.         $query_cpy .= "\n" . '  ' . $query;
  92.     } // end for
  93.     unset($field_cnt);
  94.     unset($query);
  95.     $sql_query = preg_replace('@, $@', '', $sql_query);
  96.     $query_cpy = preg_replace('@, $@', '', $query_cpy);
  97.  
  98.     // Builds the primary keys statements
  99.     $primary     = '';
  100.     $primary_cnt = (isset($field_primary) ? count($field_primary) : 0);
  101.     for ($i = 0; $i < $primary_cnt; $i++) {
  102.         $j = $field_primary[$i];
  103.         if (!empty($field_name[$j])) {
  104.             $primary .= PMA_backquote($field_name[$j]) . ', ';
  105.         }
  106.     } // end for
  107.     unset($primary_cnt);
  108.     $primary = preg_replace('@, $@', '', $primary);
  109.     if (!empty($primary)) {
  110.         $sql_query .= ', PRIMARY KEY (' . $primary . ')';
  111.         $query_cpy .= ',' . "\n" . '  PRIMARY KEY (' . $primary . ')';
  112.     }
  113.     unset($primary);
  114.  
  115.     // Builds the indexes statements
  116.     $index     = '';
  117.     $index_cnt = (isset($field_index) ? count($field_index) : 0);
  118.     for ($i = 0;$i < $index_cnt; $i++) {
  119.         $j = $field_index[$i];
  120.         if (!empty($field_name[$j])) {
  121.             $index .= PMA_backquote($field_name[$j]) . ', ';
  122.         }
  123.     } // end for
  124.     unset($index_cnt);
  125.     $index = preg_replace('@, $@', '', $index);
  126.     if (!empty($index)) {
  127.         $sql_query .= ', INDEX (' . $index . ')';
  128.         $query_cpy .= ',' . "\n" . '  INDEX (' . $index . ')';
  129.     }
  130.     unset($index);
  131.  
  132.     // Builds the uniques statements
  133.     $unique     = '';
  134.     $unique_cnt = (isset($field_unique) ? count($field_unique) : 0);
  135.     for ($i = 0; $i < $unique_cnt; $i++) {
  136.         $j = $field_unique[$i];
  137.         if (!empty($field_name[$j])) {
  138.            $unique .= PMA_backquote($field_name[$j]) . ', ';
  139.         }
  140.     } // end for
  141.     unset($unique_cnt);
  142.     $unique = preg_replace('@, $@', '', $unique);
  143.     if (!empty($unique)) {
  144.         $sql_query .= ', UNIQUE (' . $unique . ')';
  145.         $query_cpy .= ',' . "\n" . '  UNIQUE (' . $unique . ')';
  146.     }
  147.     unset($unique);
  148.  
  149.     // Builds the FULLTEXT statements
  150.     $fulltext     = '';
  151.     $fulltext_cnt = (isset($field_fulltext) ? count($field_fulltext) : 0);
  152.     for ($i = 0; $i < $fulltext_cnt; $i++) {
  153.         $j = $field_fulltext[$i];
  154.         if (!empty($field_name[$j])) {
  155.            $fulltext .= PMA_backquote($field_name[$j]) . ', ';
  156.         }
  157.     } // end for
  158.  
  159.     $fulltext = preg_replace('@, $@', '', $fulltext);
  160.     if (!empty($fulltext)) {
  161.         $sql_query .= ', FULLTEXT (' . $fulltext . ')';
  162.         $query_cpy .= ',' . "\n" . '  FULLTEXT (' . $fulltext . ')';
  163.     }
  164.     unset($fulltext);
  165.  
  166.     // Builds the 'create table' statement
  167.     $sql_query      = 'CREATE TABLE ' . PMA_backquote($table) . ' (' . $sql_query . ')';
  168.     $query_cpy      = 'CREATE TABLE ' . PMA_backquote($table) . ' (' . $query_cpy . "\n" . ')';
  169.  
  170.     // Adds table type, character set and comments
  171.     if (!empty($tbl_type) && ($tbl_type != 'Default')) {
  172.         $sql_query .= ' TYPE = ' . $tbl_type;
  173.         $query_cpy .= "\n" . 'TYPE = ' . $tbl_type;
  174.     }
  175.     if (PMA_MYSQL_INT_VERSION >= 40100 && !empty($tbl_collation)) {
  176.         $sql_query .= PMA_generateCharsetQueryPart($tbl_collation);
  177.         $query_cpy .= "\n" . PMA_generateCharsetQueryPart($tbl_collation);
  178.     }
  179.  
  180.     if (!empty($comment)) {
  181.         $sql_query .= ' COMMENT = \'' . PMA_sqlAddslashes($comment) . '\'';
  182.         $query_cpy .= "\n" . 'COMMENT = \'' . PMA_sqlAddslashes($comment) . '\'';
  183.     }
  184.  
  185.     // Executes the query
  186.     $error_create = FALSE;
  187.     $result    = PMA_DBI_try_query($sql_query) or $error_create = TRUE;
  188.  
  189.     if ($error_create == FALSE) {
  190.         $sql_query = $query_cpy . ';';
  191.         unset($query_cpy);
  192.         $message   = $strTable . ' ' . htmlspecialchars($table) . ' ' . $strHasBeenCreated;
  193.  
  194.         // garvin: If comments were sent, enable relation stuff
  195.         require_once('./libraries/relation.lib.php');
  196.         require_once('./libraries/transformations.lib.php');
  197.  
  198.         $cfgRelation = PMA_getRelationsParam();
  199.  
  200.         // garvin: Update comment table, if a comment was set.
  201.         if (isset($field_comments) && is_array($field_comments) && ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100)) {
  202.             foreach ($field_comments AS $fieldindex => $fieldcomment) {
  203.                 PMA_setComment($db, $table, $field_name[$fieldindex], $fieldcomment);
  204.             }
  205.         }
  206.  
  207.         // garvin: Update comment table for mime types [MIME]
  208.         if (isset($field_mimetype) && is_array($field_mimetype) && $cfgRelation['commwork'] && $cfgRelation['mimework'] && $cfg['BrowseMIME']) {
  209.             foreach ($field_mimetype AS $fieldindex => $mimetype) {
  210.                 PMA_setMIME($db, $table, $field_name[$fieldindex], $mimetype, $field_transformation[$fieldindex], $field_transformation_options[$fieldindex]);
  211.             }
  212.         }
  213.  
  214.         require('./' . $cfg['DefaultTabTable']);
  215.         $abort = TRUE;
  216.         exit();
  217.     } else {
  218.         PMA_mysqlDie('', '', '', $err_url, FALSE);
  219.         // garvin: An error happened while inserting/updating a table definition.
  220.         // to prevent total loss of that data, we embed the form once again.
  221.         // The variable $regenerate will be used to restore data in tbl_properties.inc.php
  222.         $num_fields = $orig_num_fields;
  223.         $regenerate = TRUE;
  224.     }
  225. } // end do create table
  226.  
  227. /**
  228.  * Displays the form used to define the structure of the table
  229.  */
  230. if ($abort == FALSE) {
  231.     if (isset($num_fields)) {
  232.         $num_fields = intval($num_fields);
  233.     }
  234.     // No table name
  235.     if (!isset($table) || trim($table) == '') {
  236.         PMA_mysqlDie($strTableEmpty, '', '', $err_url);
  237.     }
  238.     // No valid number of fields
  239.     else if (empty($num_fields) || !is_int($num_fields)) {
  240.         PMA_mysqlDie($strFieldsEmpty, '', '', $err_url);
  241.     }
  242.     // Table name and number of fields are valid -> show the form
  243.     else {
  244.         $action = 'tbl_create.php';
  245.         require('./tbl_properties.inc.php');
  246.         // Displays the footer
  247.         echo "\n";
  248.         require_once('./footer.inc.php');
  249.    }
  250. }
  251.  
  252. ?>
  253.